package cn.iocoder.yudao.module.member.service.student;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.validation.Mobile;
import cn.iocoder.yudao.module.member.controller.admin.student.vo.*;
import cn.iocoder.yudao.module.member.controller.admin.studentEducationalExperience.vo.StudentEducationalExperienceRespVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.student.StudentDO;

import javax.validation.Valid;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;

/**
 * 学生管理 Service 接口
 *
 * @author 周枫皓
 */
public interface StudentService {

    /**
     * 创建学生管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStudent(@Valid StudentCreateReqVO createReqVO);

    /**
     * 更新学生管理
     *
     * @param updateReqVO 更新信息
     */
    void updateStudent(@Valid StudentUpdateReqVO updateReqVO);

    /**
     * 审核
     * @param studentId
     */
    void examine(String studentId,StudentUpdateReqVO updateReqVO);
    /**
     * 删除学生管理
     *
     * @param id 编号
     */
    void deleteStudent(Long id);

    /**
     * 获得学生管理
     *
     * @param id 编号
     * @return 学生管理
     */
    StudentDO getStudent(Long id);

    /**
     * 获得学生管理列表
     *
     * @param ids 编号
     * @return 学生管理列表
     */
    List<StudentDO> getStudentList(Collection<Long> ids);

    /**
     * 获得学生管理分页
     *
     * @param pageReqVO 分页查询
     * @return 学生管理分页
     */
    PageResult<StudentDO> getStudentPage(StudentPageReqVO pageReqVO);

    PageResult<StudentInfoRespVO> getStudentInfoPage(StudentPageReqVO pageReqVO);
    PageResult<StudentInfoRespVO> getPushStudentInfoPage(StudentInfoPageReqVO pageReqVO);


    /**
     * 根据学生ID查询教育信息
     * @param studentId
     * @return
     */
    List<StudentEducationalExperienceRespVO> getStudentEducationalExperienceByStudentId(Long studentId);

    /**
     * 获得学生管理列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 学生管理列表
     */
    List<StudentDO> getStudentList(StudentExportReqVO exportReqVO);

    /**
     * 通过手机查询用户
     *
     * @param mobile 手机
     * @return 用户对象
     */
    StudentDO getStudentByMobile(String mobile);

    /**
     * 基于手机号创建用户。
     * 如果用户已经存在，则直接进行返回
     *
     * @param mobile     手机号
     * @param registerIp 注册 IP
     * @return 用户对象
     */
    StudentDO createStudentIfAbsent(@Mobile String mobile, String registerIp);

    /**
     * 基于手机号创建用户。
     *
     * @param mobile     手机号
     * @param registerIp 注册 IP
     * @return 用户对象
     */
    StudentDO createStudent(@Mobile String mobile, String registerIp);

    /**
     * 基于手机号查询用户。
     *
     * @param mobile     手机号
     * @param registerIp 注册 IP
     * @return 用户对象
     */
    StudentDO getStudent(@Mobile String mobile, String registerIp);


    /**
     * 基于手机号查询用户。
     *
     * @param mobile     手机号
     * @param registerIp 注册 IP
     * @return 用户对象
     */
    StudentDO getStudentBypassword(@Mobile String mobile,String password);
    /**
     * 更新用户的最后登陆信息
     *
     * @param id      用户编号
     * @param loginIp 登陆 IP
     */
    void updateStudentLogin(Long id, String loginIp);

    /**
     * 修改用户昵称
     *
     * @param studentId 用户id
     * @param nickname  用户新昵称
     */
    void updateStudentNickname(Long studentId, String nickname);

    /**
     * 修改用户头像
     *
     * @param studentId   用户id
     * @param inputStream 头像文件
     * @return 头像url
     */
    String updateStudentAvatar(Long studentId, InputStream inputStream) throws Exception;

    /**
     * 修改手机
     *
     * @param studentId 用户id
     * @param reqVO     请求实体
     */
    void updateStudentMobile(Long studentId, AppUserUpdateMobileReqVO reqVO);


    Integer getStudentRegistCount(String startDate,String endDate);

    String studentImportExcel(List<StudentExcelImportVO> list);

}
